﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Capa_Entidad;
using Negocio.Clases_BL;
using System.Data;
using System.Data.SqlClient;
using Capa_Negocio_Facade;
using Capa_Negocio_Interface;

public partial class Ventas_wfCita : System.Web.UI.Page
{
    IFacadeRegistrarCita objFacadeCita = new FacadeRegistrarCita();

    private static string CodPaciente;
    private static Int32 Id_Medico;
    private static string vOperacion = "C";
    private static Boolean fl_Buscar = false;

    Int32 idpaciente = 0;
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                //CodPaciente = Request.QueryString["CodPaciente"].ToString();
                vOperacion = (String)Session["Operacion"];

                if (vOperacion == "M")
                {
                    lblNumeroCita.Text = lblNumeroCita.Text + " " + (Int32)Session["IDCita"];
                    Mostra_Cita((Int32)Session["IDCita"]);
                    btnBuscar.Enabled = false;
                }
                else
                {
                    btnBuscar.Enabled = true;
                    Blank();
                }
                if (fl_Buscar)
                {
                    fl_Buscar = false;
                    txtIdPaciente.Text = (String)Session["CodPaciente"];
                    Cargar_Datos_paciente(txtIdPaciente.Text);
                }


                cboTipoAtencion.DataSource = objFacadeCita.listarTipoAtencion();
                cboTipoAtencion.DataBind();

                cboEspecialidad.DataSource = objFacadeCita.listarEspecialidad();
                cboEspecialidad.DataBind();



            }
        }

        catch (Exception)
        {
        }
    }
    void Blank()
    {
        txtIdPaciente.Text = "";
        txtIdPromocion.Text = "";
        txtNombreCompleto.Text = "";
        txtNumeroDoc.Text = "";
        txtObservacion.Text = "";
        txtTipoDoc.Text = "";
    }

    void Mostra_Cita(Int32 IdCita)
    {
        clsAdmCitaBL BL_Adm_Cita = new clsAdmCitaBL();
        var c = from p in BL_Adm_Cita.listar()
                where p.CIT_ID_CITA == IdCita
                select p;

        foreach (var S in c)
        {
            ObjectDataSource1.DataBind();
            ObjectDataSource2.DataBind();
            cboTipoAtencion.DataBind();
            cboEspecialidad.DataBind();
            txtIdPaciente.Text = S.ADM_PACIENTE.PAC_CODIGO_PACIENTE;
            Cargar_Datos_paciente(S.ADM_PACIENTE.PAC_CODIGO_PACIENTE);
            //cboPais.SelectedItem = cboPais.Items.FindByValue(S.PAI_ID_PAIS_PROCEDENCIA);
            // Int32 vItems = cboTipoAtencion.Items.Count;
            cboTipoAtencion.Value = S.GEN_TIPE_TIPO_ID_ATENCION;
            cboTipoAtencion.Text = S.GEN_TIPO_ATENCION.TIPA_DESCRIPCION;
            cboEspecialidad.Value = S.ESP_ID_ESPECIALIDAD;
            cboEspecialidad.Text = S.GEN_ESPECIALIDAD.ESP_NOMBRE;
            Carga_Medico(Convert.ToString(S.ESP_ID_ESPECIALIDAD));
            Id_Medico = Convert.ToInt32(S.PRM_PROGRAMACION_MEDICA.MED_ID_MEDICO);
            cboMedico.Value = S.PRM_PROGRAMACION_MEDICA.MED_ID_MEDICO;
            cboMedico.Text = S.PRM_PROGRAMACION_MEDICA.GEN_MEDICO.GEN_EMPLEADO.EMP_APELLIDO_PATERNO + ' ' + S.PRM_PROGRAMACION_MEDICA.GEN_MEDICO.GEN_EMPLEADO.EMP_APELLIDO_MATERNO + ' ' + S.PRM_PROGRAMACION_MEDICA.GEN_MEDICO.GEN_EMPLEADO.EMP_NOMBRES;
            txtIdPromocion.Text = Convert.ToString(S.MAR_PROMOCION);
            txtObservacion.Text = Convert.ToString(S.CIT_OBSERVACION);
            dtpFecha.Value = S.CIT_FECHA;

            Cargar_Grid_Horario(Convert.ToString(S.PRM_PROGRAMACION_MEDICA.MED_ID_MEDICO));
        }
    }

    //private Int32 Cod_Medico(String id_prog)
    //{
    //    Int32 resul = 0;  
    //    clsPrm_Programacion_MedicaBL ent_prg_med = new clsPrm_Programacion_MedicaBL();
    //    var c = from p in ent_prg_med.listar()
    //            where p.PRM_ID_PROGRAMACION == id_prog
    //            select p;

    //    foreach (var S in c)
    //    {
    //        resul= Convert.ToInt32( S.MED_ID_MEDICO);
    //    }
    //    return resul;
    //}

    void Cargar_Datos_paciente(string codigo)
    {
        if (codigo.Length > 0)
        {
            //clsPacienteBLcs BL_Paciente = new clsPacienteBLcs();
            var consulta = from P in objFacadeCita.listarPaciente()
                           where P.PAC_CODIGO_PACIENTE == codigo
                           select P;
            foreach (var S in consulta)
            {

                txtNombreCompleto.Text = S.PAC_APELLIDO_PATERNO + " " + S.PAC_APELLIDO_MATERNO + " " + S.PAC_NOMBRES;
                txtTipoDoc.Text = "DNI";
                txtNumeroDoc.Text = S.PAC_NRO_DOCUMENTO;
                //txtApellidoPaterno.Text = S.PAC_APELLIDO_PATERNO;
                //txtApellidoMaterno.Text = S.PAC_APELLIDO_MATERNO;
                //txtNombres.Text = S.PAC_PRIMER_NOMBRE + " " + S.PAC_SEGUNDO_NOMBRE;
                //dtpFechaNacimiento.Value = S.PAC_FECHA_NACIMIENTO;
                //txtDni.Text = S.PAC_NRO_DOCUMENTO;
                //txtTelefono.Text = S.PAC_TELEFONO;
                //txtCodigo.Text = S.PAC_CODIGO_PACIENTE;
                //txtObservacion.Text = S.PAC_OBSERVACION;
                //txtNroSeguro.Text = S.PAC_NRO_SEGURO;
                //idpaciente = S.PAC_ID_PACIENTE;
                //cboSexo.SelectedItem=cboSexo.Items.FindByValue("1");//S.TIPS_ID_TIPO_SEXO;
                //cboPais.SelectedItem=cboPais.Items.FindByValue(S.PAI_ID_PAIS_PROCEDENCIA);
                //cboDepatamentoPais.SelectedItem = cboPais.Items.FindByValue(S.DEPT_ID_DPTO_PROCEDENCIA);
                //cboProvincia.SelectedItem = cboProvincia.Items.FindByValue(S.PRO_ID_PROVINCIA_PROCEDENCIA);
                //cboDistrito.SelectedItem = cboDistrito.Items.FindByValue(S.DIST_ID_DISTRITO_PROCEDENCIA);
                //txtDomicilio.Text = S.PAC_DIRECCION_DOMICILIO;
                //txtDireccion.Text = S.PAC_DIRECCION_DOMICILIO;
                //txtmanzana.Text = S.PAC_MANZANA_DOMICILIO;
                //txtLote.Text = S.PAC_LOTE_DOMICILIO;
                //txtEtapa.Text = S.PAC_SECTOR_DOMICILIO;
                //txtPiso.Text = S.PAC_PISO_DOMICILIO;
                //txtNumero.Text = S.PAC_NRO_DOMICILIO;
                //cboProcedencia.SelectedItem = cboProcedencia.Items.FindByValue(S.TIP_ID_TIPO_PROCEDENCIA);
                //cboTipoOcupacion.SelectedItem = cboTipoOcupacion.Items.FindByValue(S.TIO_ID_TIPO_OCUPACION);
                //cboGradoInstruccion.SelectedItem = cboGradoInstruccion.Items.FindByValue(S.TGI_ID_GRADO_INSTRUCCION);
            }
        }

    }

    protected void ASPxButton1_Click(object sender, EventArgs e)
    {
        if (validarInsercion() == true)
        {
            ADM_CITA Ent_AdmCita = new ADM_CITA();
            clsAdmCitaBL BL_AdmCita = new clsAdmCitaBL();
            clsPrm_TurnoBL BL_Turno = new clsPrm_TurnoBL();

            //verifica fecha
            DateTime fechaActual = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy"));

            if (fechaActual.CompareTo(dtpFecha.Value) > 0)
            {
                //Util.showmsg("La fecha de la cita no puede ser menor a la fecha actual", this.Page);
                lblMensaje.Text = "La fecha de la cita no puede ser menor a la fecha actual";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                return;
            }

            try
            {
                //clsPacienteBLcs BL_Paciente = new clsPacienteBLcs();
                var consulta1 = from P in objFacadeCita.listarPaciente()
                                where P.PAC_CODIGO_PACIENTE == txtIdPaciente.Text
                                select P;
                foreach (var S in consulta1)
                {
                    idpaciente = S.PAC_ID_PACIENTE;
                }
            }
            catch (Exception)
            {
            }

            if ((String)dgHorario.GetRowValues(dgHorario.FocusedRowIndex, new String[] { "Cita" }) != "Libre")
            {
                //Util.showmsg("Horario Reservado!!!", this.Page);
                lblMensaje.Text = "Horario Reservado!!!";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                return;
            }

            //regsitro cita
            if (vOperacion == "C")
            {
                Ent_AdmCita.CIT_ID_CITA = objFacadeCita.UltimoNumero() + 1;
            }
            else
            {
                Ent_AdmCita.CIT_ID_CITA = (Int32)Session["IDCita"];
            }

            Ent_AdmCita.CIT_FECHA = dtpFecha.Date;
            Ent_AdmCita.PAC_ID_PACIENTE = idpaciente;
            Ent_AdmCita.ESC_ID_ESTADO_CITA = "1";
            Ent_AdmCita.GEN_TIPE_TIPO_ID_ATENCION = Convert.ToInt32(cboTipoAtencion.SelectedItem.Value);
            Ent_AdmCita.ESP_ID_ESPECIALIDAD = Convert.ToInt32(cboEspecialidad.SelectedItem.Value);
            Ent_AdmCita.MAR_ID_PROMOCION = txtIdPromocion.Text;
            Ent_AdmCita.PRM_ID_PROGRAMACION = (String)dgHorario.GetRowValues(dgHorario.FocusedRowIndex, "PRM_ID_PROGRAMACION");
            Ent_AdmCita.CIT_OBSERVACION = txtObservacion.Text;

            if (vOperacion == "C")
            {
                if (objFacadeCita.InsertarCita(Ent_AdmCita) == true)
                {
                    //Util.showmsgconfirmacion("Nueva Cita Agregada!!!", this.Page);
                    lblMensaje.Text = "Nueva Cita Agregada!!!";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);

                    Response.Redirect("wfCitaListado.aspx", true);
                }
                else
                {
                    //Util.showmsg("Error: No se pudo registrar la cita!!!", this.Page);
                    lblMensaje.Text = "Error: No se pudo registrar la cita!!!";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                }
            }
            else
            {
                if (objFacadeCita.ModificarCita(Ent_AdmCita) == true)
                {
                    //Util.showmsgconfirmacion("Nueva Cita Agregada!!!", this.Page);
                    lblMensaje.Text = "Nueva Cita Agregada!!!";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);

                    Response.Redirect("wfCitaListado.aspx", true);
                }
                else
                {
                    //Util.showmsg("Error: No se pudo registrar la cita!!!", this.Page);
                    lblMensaje.Text = "Error: No se pudo registrar la cita!!!";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                }
            }
        }

        ////verifica programcion medica
        //String IDProgMed = "";
        //try
        //{

        //    clsPrm_Programacion_MedicaBL BL_ProgMed = new clsPrm_Programacion_MedicaBL();
        //    var consulta = from P in BL_ProgMed.listar()
        //                   where P.MED_ID_MEDICO == Convert.ToInt32(cboMedico.SelectedItem.Value) && P.PRM_FECHA.Equals(dtpFecha.Value)
        //                   select P;
        //    foreach (var S in consulta)
        //    {
        //        IDProgMed = S.PRM_ID_PROGRAMACION;
        //    }
        //}
        //catch (Exception)
        //{ 


        //}

        //verifica id de paciente
        //if (IDProgMed.Length==0)
        //{
        //    Util.showmsg("No Hay Programacion Para este Medico!!!", this.Page);
        //    return;
        //}

    }
    protected void ASPxButton2_Click(object sender, EventArgs e)
    {
        Response.Redirect("wfCitaListado.aspx", true);
    }
    protected void cboEspecialidad_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {

            Carga_Medico(Convert.ToString(cboEspecialidad.SelectedItem.Value));
        }
        catch (Exception)
        {
        }

    }

    void Carga_Medico(String IdEspecialidad)
    {

        cboMedico.DataSource = objFacadeCita.listarMedicoXEspecialidad(Convert.ToInt32(IdEspecialidad));
        cboMedico.DataBind();

        cboMedico.Text = String.Empty;
        //ObjectDataSource3.SelectParameters.Clear();
        //ObjectDataSource3.SelectParameters.Add("ID_Especialidad",IdEspecialidad );
        //ObjectDataSource3.SelectMethod = "listar_Medico_Filtro";
        //ObjectDataSource3.Select();
        //ObjectDataSource3.DataBind();
    }

    //void Cargar_Horario()
    //{
    //    //clsAdmCitaBL BL_AdmCita = new clsAdmCitaBL();
    //    //dgHorario.DataSource = BL_AdmCita.listarHorario(dtpFecha.Date, Convert.ToInt32(cboMedico.SelectedItem.Value));
    //    //dgHorario.DataBind();
    //    ObjectDataSource4.SelectParameters.Clear();
    //    ObjectDataSource4.SelectParameters.Add("Fecha_Prog", dtpFecha.Date.ToString("MM/dd/yyyy"));
    //    ObjectDataSource4.SelectParameters.Add("id_medico", Convert.ToString(cboMedico.SelectedItem.Value));
    //    //"MED_ID_MEDICO"
    //    //  ObjectDataSource1.SelectParameters.Add("P_co_Tipo_Atencion", func.TraerCodigo(ddlTipoAtencion.Text));
    //    ObjectDataSource4.SelectMethod = "listarHorario";
    //    ObjectDataSource4.Select();
    //    ObjectDataSource4.DataBind();
    //}



    protected void dtpFecha_DateChanged(object sender, EventArgs e)
    {
        //verifica fecha
        DateTime fechaActual = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy"));

        if (fechaActual.CompareTo(dtpFecha.Value) > 0)
        {
            //Util.showmsg("La fecha de la cita no puede ser menor a la fecha actual", this.Page);
            lblMensaje.Text = "La fecha de la cita no puede ser menor a la fecha actual";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
            return;
        }
        //cboMedico.SelectedItem = cboMedico.Items.FindByValue(cboMedico.Value);
        try
        {
            Cargar_Grid_Horario(Convert.ToString(cboMedico.SelectedItem.Value));
        }
        catch (Exception)
        {
            Cargar_Grid_Horario(Convert.ToString(Id_Medico));
        }
        //finally
        //{

        //}
        //if (cboMedico.SelectedItem.Value==null)
        //{
        //    Cargar_Grid_Horario(Convert.ToString(cboMedico.Value));
        //}
        //else
        //{
        //    Cargar_Grid_Horario(Convert.ToString(cboMedico.SelectedItem.Value));
        //}

    }
    protected void dgHorario_PageIndexChanged(object sender, EventArgs e)
    {
        // Cargar_Horario();
        Cargar_Grid_Horario(Convert.ToString(cboMedico.SelectedItem.Value));
    }




    protected void dgHorario_SelectionChanged(object sender, EventArgs e)
    {
        //grid.FocusedRowIndex = grid.FindVisibleIndexByKeyValue(newKey);
        if ((String)dgHorario.GetRowValues(dgHorario.FocusedRowIndex, new String[] { "Cita" }) != "Libre")
        {
            // Response.Write("<script type=\"text/javascript\">alert('Este Horario esta reservado!');</script>");
            //String script = "<script type=\"text/javascript\">alert('Este Horario esta reservado!');</script>";
            // Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", script);
            //ScriptManager.RegisterClientScriptBlock(this, this.GetType(), " ", "alert('Horario Reservado');", true); 
            //Util.showmsgconfirmacion("El Horario elegido esta Reservado", this.Page);
            lblMensaje.Text = "El Horario elegido esta Reservado";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
            // dgHorario.FocusedRowIndex = 0;
        }
    }



    // set up ADO.NET objects
    public void Cargar_Grid_Horario(String idMedico)
    {

        Negocio.cnDB Conex = new Negocio.cnDB();
        SqlConnection cn = new SqlConnection();
        Conex.ConexBD(cn);
        //cn = new SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI");
        DataSet ds = new DataSet();



        SqlDataAdapter da = new SqlDataAdapter("select * from  V_Horario_Cita where PRM_FECHA='" + dtpFecha.Date.ToString("dd/MM/yyyy") + "' and MED_ID_MEDICO=" + idMedico, cn);
        SqlCommandBuilder cmdBldr = new SqlCommandBuilder(da);
        da.Fill(ds, "V_Horario_Cita");
        dgHorario.DataSource = ds;
        dgHorario.DataMember = "V_Horario_Cita";
        dgHorario.DataBind();
        if (dgHorario.VisibleRowCount == 0)
        {
            //Util.showmsg("No Existe programacion para el medico!!!", this.Page);
            lblMensaje.Text = "No Existe programacion para el medico!!!";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }

    }



    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        fl_Buscar = true;
    }
    protected void ObjectDataSource2_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {

    }


    protected void ObjectDataSource3_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {

    }
    protected void btnDetalle_Click1(object sender, EventArgs e)
    {
        if (txtIdPaciente.Text.Length == 0)
        {
            //Util.showmsg("Seleccione un Paciente!!!", this.Page);
            lblMensaje.Text = "Seleccione un Paciente!!!";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
            return;
        }
        Session["Operacion"] = "M";
        Session["IDPaciente"] = Convert.ToInt32(txtIdPaciente.Text);
        pcDetallePaciente.ShowOnPageLoad = true;
        pcDetallePaciente.HeaderText = "Detalle Paciente";
        pcDetallePaciente.ContentUrl = "~/Clinica/wfDetallePaciente.aspx";
        //  pcDetallePaciente.ContentUrl=


    }

    private bool validarInsercion()
    {
        bool Bool = true;

        if (txtIdPaciente.Value == null)
        {
            Bool = false;
            //Util.showmsg("El Id del Paciente debe ser ingresado", this.Page);
            lblMensaje.Text = "El Id del Paciente debe ser ingresado";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (cboTipoAtencion.Value == null)
        {
            Bool = false;
            //Util.showmsg("El Tipo de Atención debe ser ingresado", this.Page);
            lblMensaje.Text = "El Tipo de Atención debe ser ingresado";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (cboEspecialidad.Value == null)
        {
            Bool = false;
            //Util.showmsg("La Especialidad debe ser ingresada", this.Page);
            lblMensaje.Text = "La Especialidad debe ser ingresada";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (cboMedico.Value == null)
        {
            Bool = false;
            //Util.showmsg("El Médico debe ser ingresado", this.Page);
            lblMensaje.Text = "El Médico debe ser ingresado";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }

        return Bool;
    }
    protected void cboTipoAtencion_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
}